package com.weiqiao.api.repository;

import com.weiqiao.base.dao.IBaseMongoDao;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.springframework.data.domain.Pageable;

import java.util.List;

/**
 * 团队商品表。也可以叫做省长管理团队表
 * 因为省长管理的是团队，省长和团队的关系为一对多。
 * 一个问题是如果所有的关系全存在商品表，那么商品表将会变得非常臃肿，会形成三维数组，这个是不可取的，故根据省长id，单独做了新表
 * @author PEI
 */
public interface ITeamCommodityApiRepository extends IBaseMongoDao {

    /**
     * 新增或编辑信用卡商品
     * @param companyId
     * @param filter
     * @param doc
     * @return
     */
    boolean addCardCommodity(int companyId, Bson filter, Document doc);

    /**
     * 获取最高佣金的，团队商品信息
     * @param companyId 公司id
     * @param filter 查询条件
     * @param sort 排序字段
     * @return
     */
    String findMaxCommissionTeamCommodity(int companyId, Bson filter, Bson sort);

    /**
     * 更新单条商品信息
     *
     * @param filter 查询条件
     * @param json   更新内容
     */
    boolean updateOneCommodityByJson(int companyId, Bson filter, String json);

    /**
     * 查询商品类列表信息
     *
     * @param filter
     * @return
     */
    List<String> findCommoditys(int companyId, Bson filter);

    /**
     * 查询商品类列表信息
     *
     * @param filter
     * @return
     */
    String findCommodity(int companyId, Bson filter);

    /**
     * 修改单个商品信息
     *
     * @param filter 查询条件
     * @param doc    更新内容
     */
    boolean updateOneCommodity(int companyId, Bson filter, Document doc, boolean boo);

    /**
     * --统计商品数量
     *
     * @param bson 查询条件
     */
    int countCommodity(int companyId, Bson bson);

    /**
     * 通过id查询
     *
     * @param bson
     * @return
     */
    String findCommodityById(int companyId, Bson bson);

    /**
     * 通过条件去批量修改
     *
     * @param filter 修改条件
     * @param doc    修改字段
     * @param b
     * @return
     */
    boolean updateMany(int companyId, Bson filter, Document doc, boolean b);

    /**
     * 查询并且指定输出条数
     * @param filter
     * @param limit
     * @return
     */
    List<String> findCommodityAndLimit(int companyId, Bson filter, int limit);

    /**
     * 根据查询条件并分页查询商品
     *
     * @param filter
     * @param pageable
     * @return
     */
    List<String> findCommodityByFilterAndPage(int companyId, Bson filter, Pageable pageable);

    /**
     * 查询商品并且指定输出
     * @param filter 查询条件
     * @param project 指定输出字段
     * @return
     */
    List<String> findListAndProject(int companyId, Document filter, Document project);

    /**
     * 查找并且排序、指定取条数
     * @param filter
     * @param filterSort
     * @param limit
     * @return
     */
    List<String> findCommoditySortAndLimit(int companyId, Bson filter, Bson filterSort, int limit);

    /**
     * 通过条件删除
     * @param companyId
     * @param filter
     * @return
     */
    boolean delMany(int companyId, Bson filter);

}
